package org.csu.newpetstoreback.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.csu.newpetstoreback.common.CommonResponse;
import org.csu.newpetstoreback.entity.Cart;
import org.csu.newpetstoreback.entity.Item;
import org.csu.newpetstoreback.entity.ItemInventory;
import org.csu.newpetstoreback.persistence.CartMapper;
import org.csu.newpetstoreback.persistence.ItemInventoryMapper;
import org.csu.newpetstoreback.persistence.ItemMapper;
import org.csu.newpetstoreback.service.CartService;
import org.csu.newpetstoreback.vo.CartItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service("cartService")
public class CartServiceImpl implements CartService {

    @Autowired
    CartMapper cartMapper;

    @Autowired
    ItemMapper itemMapper;

    @Autowired
    ItemInventoryMapper itemInventoryMapper;


    @Override
    public CommonResponse<List<CartItem>> getCartItems(String username) {
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", username);
        List<Cart> cartList = cartMapper.selectList(queryWrapper);
        if (cartList.isEmpty()) {
            return CommonResponse.createForNotFound(2,"找不到该用户");
        }

        //获取某个用户的购物车里单品-itemid对应是关键
        List<CartItem> cartItemList = new ArrayList<>();
        for (Cart cart : cartList) {
            Item item = getItemById(cart.getItemId());
            CartItem cartItem = itemToCartItem(cart, item);
            cartItemList.add(cartItem);
        }

        return CommonResponse.createForSuccess(cartItemList);

    }

    @Override
    public CommonResponse<List<CartItem>> addCartItem(String username, String itemId,int increment) {
        //先获得用户现有的购物车商品列表，再加入
        List<CartItem> cartItemList = getCartListByUsername(username);

        System.out.println("购物车列表：" + cartItemList);

        CartItem cartItem = getCartItemByUsernameAndId(username, itemId);

        System.out.println("购物车cartItem：" + cartItem);

        Item item = getItemById(itemId);
        if(item == null){
            return CommonResponse.createForNotFound("未能找到该宠物");
        }

        Cart cart = new Cart();
        if (cartItemList == null) {
            cartItem = new CartItem();
            cartItem.setItemId(itemId);
            System.out.println("测试1"+cartItem);
            cartItem.setQty(increment);
            System.out.println("测试2"+cartItem);
            calculateTotal(cartItem);
            System.out.println("测试3"+cartItem);
            cartItem.setIImage(item.getIImage());
            System.out.println("测试4"+cartItem);
            cartItem.setInStock(true);
            System.out.println("测试5"+cartItem);
            cartItem.setIName(item.getIName());
            System.out.println("测试6"+cartItem);
            cartItem.setIDescn(item.getIDescn());
            System.out.println("测试7"+cartItem);
            cartItem.setListPrice(item.getListPrice());

            System.out.println("测试"+cartItem);
            cartItemList = new ArrayList<>();
            cartItemList.add(cartItem);


            cart.setUsername(username);
            cart.setItemId(itemId);
            cart.setQuantity(increment);
            cartMapper.insert(cart);

        } else {
            int i =-1;
            for(CartItem cartItemOne :cartItemList){
                if(cartItemOne.equals(cartItem)&&i<0){
                    cartItemOne.setQty(incrementQuantity(cartItemOne,increment));
                    calculateTotal(cartItemOne);

                    cart.setQuantity(cartItemOne.getQty());
                    cart.setUsername(username);
                    cart.setItemId(itemId);

                    QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
                    queryWrapper.eq("userid", username).eq("itemid", itemId);
                    cartMapper.update(cart, queryWrapper);

                    cartItemList = new ArrayList<>();
                    cartItemList.add(cartItemOne);
                    i=1;
                }
            }
            if(i<0){
                cartItem = new CartItem();
                cartItem.setItemId(itemId);
                System.out.println("测试1"+cartItem);
                cartItem.setQty(increment);
                System.out.println("测试2"+cartItem);
                calculateTotal(cartItem);
                System.out.println("测试3"+cartItem);
                cartItem.setIImage(item.getIImage());
                System.out.println("测试4"+cartItem);
                cartItem.setInStock(true);
                System.out.println("测试5"+cartItem);
                cartItem.setIName(item.getIName());
                System.out.println("测试6"+cartItem);
                cartItem.setIDescn(item.getIDescn());
                System.out.println("测试7"+cartItem);
                cartItem.setListPrice(item.getListPrice());

                System.out.println("测试"+cartItem);
                cartItemList = new ArrayList<>();
                cartItemList.add(cartItem);


                cart.setUsername(username);
                cart.setItemId(itemId);
                cart.setQuantity(increment);
                cartMapper.insert(cart);
            }
        }

        return CommonResponse.createForSuccess(cartItemList);
    }

    @Override
    public CommonResponse<List<CartItem>> removeItemFromCart(String username, String itemId) {
        List<CartItem> cartItemList = getCartListByUsername(username);
        //要加入数据库的东西
        CartItem cartItem = getCartItemByUsernameAndId(username, itemId);
        for(CartItem cartItemOne :cartItemList){
            if(cartItemOne.equals(cartItem)){
                cartItemList.remove(cartItem);

                QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("userid", username).eq("itemid", itemId);
                cartMapper.delete(queryWrapper);

                return CommonResponse.createForSuccess(cartItemList);
            }

        }
        return CommonResponse.createForNotFound("购物车里没有该商品");

    }

    @Override
    public CommonResponse<CartItem> updateCartItemQuantity(String username, String itemId, int quantity) {

        CartItem cartItem = getCartItemByUsernameAndId(username, itemId);
        Item item = getItemById(itemId);

        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", username);
        List<Cart> cartList = cartMapper.selectList(queryWrapper);
        System.out.println(cartList);
        for (Cart cartOne : cartList) {
            System.out.println("hhhh:" + cartOne.getItemId());
            if (cartOne.getItemId().equals(itemId)) {

                QueryWrapper<Cart> qWrapper = new QueryWrapper<>();
                qWrapper.eq("userid", username).eq("itemid", itemId);
                cartOne.setQuantity(quantity);
                cartItem = itemToCartItem(cartOne,item);
                cartMapper.update(cartOne, queryWrapper);



                int affectRows = cartMapper.update(cartOne, qWrapper);
                if (affectRows > 0) {
                    System.out.println("更新成功");
                    return CommonResponse.createForSuccess(cartItem);
                } else {
                    System.out.println("更新失败");

                }
            }

        }
        return CommonResponse.createForNotFound("购物车里没有该宠物");

    }
    private CartItem itemToCartItem(Cart cart, Item item) {
        CartItem cartItem = new CartItem();
        System.out.println(cart);
        System.out.println(item);

        ItemInventory itemInventory = itemInventoryMapper.selectById(cart.getItemId());

        cartItem.setItemId(cart.getItemId());
        cartItem.setQty(cart.getQuantity());
        cartItem.setListPrice(item.getListPrice());
        cartItem.setIName(item.getIName());
        cartItem.setIImage(item.getIImage());


        if (itemInventory.getQuantity() > 0) {
            cartItem.setInStock(true);
        } else {
            cartItem.setInStock(false);
        }


        if (item != null && item.getListPrice() != null) {
            cartItem.setTotal(item.getListPrice().multiply(new BigDecimal(cartItem.getQty())));
        } else {
            cartItem.setTotal(null);
        }

        return cartItem;
    }

    private Item getItemById(String itemId) {
        Item item = itemMapper.selectById(itemId);
        if (item == null) {
            return null;
        }
        return item;
    }

    @Override
    public CommonResponse<String> deleteAllCartItems(String username) {

        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", username);
//        List<Cart> cartList = cartMapper.selectList(queryWrapper);

        cartMapper.delete(queryWrapper);

        return CommonResponse.createForSuccess("清空购物车成功");

    }

//    private List<CartItem> getCartByUsername(String username){
//        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("userid", username);
//
//        List<Cart> cartList = cartMapper.selectList(queryWrapper);
//        List<CartItem> cartItemList = new ArrayList<>();
//        for (Cart cart : cartList) {
//            Item item = getItemById(cart.getItemId());
//            CartItem cartItem = itemToCartItem(cart,item);
//            cartItemList.add(cartItem);
//
//        }
//
//        return cartItemList;
//    }

    private CartItem getCartItemByUsernameAndId(String username, String itemId) {

        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", username);

        List<Cart> cartList = cartMapper.selectList(queryWrapper);

        Item item = getItemById(itemId);
        CartItem cartItem = new CartItem();


        for (Cart cartOne : cartList) {

            if (cartOne.getItemId().equals(itemId)) {

                cartItem = itemToCartItem(cartOne, item);

                return cartItem;

            }
        }

        return null;

    }

    public List<CartItem> getCartListByUsername(String username) {
        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userid", username);
        List<Cart> cartList = cartMapper.selectList(queryWrapper);
        if (cartList.isEmpty()) {
            return null;
        }

        //获取某个用户的购物车里单品-itemid对应是关键
        List<CartItem> cartItemList = new ArrayList<>();
        for (Cart cart : cartList) {
            Item item = getItemById(cart.getItemId());
            CartItem cartItem = itemToCartItem(cart, item);
            cartItemList.add(cartItem);
        }

        return  cartItemList;

    }


    public int incrementQuantity(CartItem cartItem,int increment ) {
        int qty = cartItem.getQty();
        int newQty = qty+increment;
        System.out.println("测试99"+newQty);
        return newQty;

    }

    private void calculateTotal(CartItem cartItem) {


        String itemId = cartItem.getItemId();
        int qty = cartItem.getQty();
        Item item = itemMapper.selectById(itemId);
        if (item != null && item.getListPrice() != null) {
            cartItem.setTotal(item.getListPrice().multiply(new BigDecimal(qty)));
        } else {
            cartItem.setTotal(null);

        }

    }


}